home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1997-03-06 | 5.5 KB | 297 lines |
- '
- ' VR T.A.P.S. - The AMOS Protection System
- '
- ' By James Kaylor
- '
- ' Freely distributable
- '
- ' TAPS 1997 - Version 1.2
- '
- '
- ' The following procedures are Copyright 1997 James Kaylor
- ' and are NOT to be UNLOCKED and/or changed in ANY way.
- ' ---------------------------------------------
- Procedure UNCODE[FILENAME$,BANK,PASSWORD$]
- '
- F$=FILENAME$
- Open In 1,F$
- L=Lof(1)
- Close 1
- Erase 10
- Reserve As Data 10,L
- Bload F$,10
- If Left$(PASSWORD$,1)="P"
- FLAG$="ILBM"
- Left$(PASSWORD$,1)="7"
- For I=41 To 200
- Add CD,1,1 To Len(PASSWORD$)
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(10)+I)
- Ror.b CODE,C
- Poke Start(10)+I,Asc(Chr$(C))
- Next I
- End If
- If Left$(PASSWORD$,1)="T"
- II=-100
- Left$(PASSWORD$,1)="9"
- End If
- '
- CD=0
- If L>39
- For I=0 To 19
- Add CD,3,1 To Len(PASSWORD$)
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(10)+I)
- Ror.b CODE,C
- Poke Start(10)+I,Asc(Chr$(C))
- Next I
- For I=20 To 31
- Add CD,4,1 To Len(PASSWORD$)
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(10)+I)
- Ror.b CODE,C
- Poke Start(10)+I,Asc(Chr$(C))
- Next I
- For I=32 To 40
- Add CD,2,1 To Len(PASSWORD$)
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(10)+I)
- Ror.b CODE,C
- Poke Start(10)+I,Asc(Chr$(C))
- Next I
- End If
- I=41
- If II<>-100
- II=Val(Mid$(PASSWORD$,1,2))
- If II<15 or II>45
- II=15
- End If
- End If
- If II=-100
- II=3
- End If
- Repeat
- If I<L-2
- Add CD,1,1 To Len(PASSWORD$)
- If CODE>2 and CODE<7
- Add CD,-2,1 To Len(PASSWORD$)
- End If
- If CODE>0 and CODE<3
- Add CD,2,1 To Len(PASSWORD$)
- End If
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(10)+I)
- Ror.b CODE,C
- Poke Start(10)+I,Val(Bin$(C,8))
- End If
- Add I,II
- Until I>L-2
- '
- If II=3
- Left$(PASSWORD$,1)="T"
- PW$=PASSWORD$
- End If
- ' -------------
- 'If FLAG$="ILBM"
- ' I=-1
- ' II=8
- ' Else
- ' I=0
- ' II=17
- 'End If
- If BANK>-1 and BANK<17
- Bsave "ram:f",Start(10) To Start(10)+Length(10)
- Erase 10
- If FLAG$<>"ILBM"
- Erase BANK
- If II<>3
- If BANK>0
- Load "ram:f",BANK
- End If
- Else
- If BANK>0
- Reserve As Data BANK,L
- Bload "ram:f",BANK
- End If
- End If
- Else
- If BANK<8
- Load Iff "ram:f",BANK
- End If
- End If
- Kill "ram:f"
- End If
- Erase 10
- FLAG$=""
- '
- End Proc
- Procedure UNCODE_BANK[FROM_BANK,BANK,PASSWORD$]
- '
- L=Length(FROM_BANK)
- If Left$(PASSWORD$,1)="P"
- FLAG$="ILBM"
- Left$(PASSWORD$,1)="7"
- For I=41 To 200
- Add CD,1,1 To Len(PASSWORD$)
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(FROM_BANK)+I)
- Ror.b CODE,C
- Poke Start(FROM_BANK)+I,Asc(Chr$(C))
- Next I
- End If
- If Left$(PASSWORD$,1)="T"
- II=-100
- Left$(PASSWORD$,1)="9"
- End If
- '
- CD=0
- If L>39
- For I=0 To 19
- Add CD,3,1 To Len(PASSWORD$)
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(FROM_BANK)+I)
- Ror.b CODE,C
- Poke Start(FROM_BANK)+I,Asc(Chr$(C))
- Next I
- For I=20 To 31
- Add CD,4,1 To Len(PASSWORD$)
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(FROM_BANK)+I)
- Ror.b CODE,C
- Poke Start(FROM_BANK)+I,Asc(Chr$(C))
- Next I
- For I=32 To 40
- Add CD,2,1 To Len(PASSWORD$)
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(FROM_BANK)+I)
- Ror.b CODE,C
- Poke Start(FROM_BANK)+I,Asc(Chr$(C))
- Next I
- End If
- I=41
- If II<>-100
- II=Val(Mid$(PASSWORD$,1,2))
- If II<15 or II>45
- II=15
- End If
- End If
- If II=-100
- II=3
- End If
- Repeat
- If I<L-2
- Add CD,1,1 To Len(PASSWORD$)
- If CODE>2 and CODE<7
- Add CD,-2,1 To Len(PASSWORD$)
- End If
- If CODE>0 and CODE<3
- Add CD,2,1 To Len(PASSWORD$)
- End If
- CODE=Val(Mid$(PASSWORD$,CD,1))
- C=Peek(Start(FROM_BANK)+I)
- Ror.b CODE,C
- Poke Start(FROM_BANK)+I,Val(Bin$(C,8))
- End If
- Add I,II
- Until I>L-2
- '
- If II=3
- Left$(PASSWORD$,1)="T"
- PW$=PASSWORD$
- End If
- ' -------------
- 'If FLAG$="ILBM"
- ' I=-1
- ' II=8
- ' Else
- ' I=0
- ' II=17
- 'End If
- If BANK>-1 and BANK<17
- Bsave "ram:f",Start(FROM_BANK) To Start(FROM_BANK)+Length(FROM_BANK)
- Erase FROM_BANK
- If FLAG$<>"ILBM"
- Erase BANK
- If II<>3
- If BANK>0
- Load "ram:f",BANK
- End If
- Else
- If BANK>0
- Reserve As Data BANK,L
- Bload "ram:f",BANK
- End If
- End If
- Else
- If BANK<8
- Load Iff "ram:f",BANK
- End If
- End If
- Kill "ram:f"
- End If
- FLAG$=""
- '
- End Proc
- Procedure FILE_LOAD[FILENAME$,BANK]
- Open In 1,FILENAME$
- L=Lof(1)
- Close 1
- Erase BANK
- Reserve As Data BANK,L
- Bload FILENAME$,BANK
- End Proc
- ' ---------------------------------------------
- '
- '
- ' BANK_2_A$ is used to grab text out of a bank once you've
- ' decoded it with UNCODE or UNCODE_BANK.
- '
- ' BANK = The bank where the text is stored.
- ' ---------------------------------------------
- Procedure BANK_2_A$[BANK]
- Shared A$
- If Length(BANK)<1 Then Pop Proc
- A$=Space$(Length(BANK))
- Copy Start(BANK),Start(BANK)+Length(BANK) To Varptr(A$)
- End Proc
- ' ---------------------------------------------
- '
- ' Example program below:
- '
- ' * Make sure you have "Coded" and "Amiga.pic" in RAM: from this archive!
- '
- '
- UNCODE["ram:coded",11,"T1111111111"]
- ' /\ --- Coded file is loaded and stored in bank 11 ---
- FILE_LOAD["ram:amiga.pic",12]
- ' /\ --- Coded ILBM is loaded and stored in bank 12 ---
- BANK_2_A$[11]
- ' /\ --- Bank contents are put into A$ --- \/
- Hide On
- Screen Open 0,640,200,2,Hires
- Curs Off
- Colour 1,$FFF
- Print A$
- Print
- Print
- Print " - Press a key -"
- Wait Key
- Cls 0
- Locate 0,0
- Print "Loading picture. Please wait..."
- ' --- This will take some time unless COMPILED! ---
- Auto View Off
- UNCODE_BANK[12,0,"P1112223334"]
- Screen Display 0,,40,,
- Screen Open 1,16,16,16,Lowres
- Get Palette(0)
- Screen Hide 1
- Screen 0
- For I=0 To 15
- Colour I,$0
- Next I
- View
- Wait Vbl
- Fade 4 To 1
- Wait Key
- Fade 4